package exception02;

import java.io.IOException;
import java.util.zip.DataFormatException;

/*
 *try...catch处理多个异常的注意事项:
 *   1.如果多个catch中的异常类型没有父子关系(同级关系),多个catch的顺序不影响处理结果
 *   2.如果多个catch中的异常类型有父子关系(同级关系),那么父类型不能放在子类型的上边,这是因为父类型的catch如果放在最上边
 *        他可以处理子类型的异常(多态思想),同时也可以处理自身的异常,子类的catch将永远不会执行
 *      所以一般把父类型的catch放在子类型catch的后边
 * */
public class ExceptionDemo06 {
    public static void main(String[] args) {
/*        try {
            method01(2);
        } catch (IOException e) {
            System.out.println("捕获了IOException" + e);
        } catch (DataFormatException e) {
            System.out.println("捕获了DataFormatException" + e);
        }*/
/*        try {
            method01(2);
        } catch (DataFormatException e) {
            System.out.println("捕获了DataFormatException" + e);
        } catch (IOException e) {
            System.out.println("捕获了IOException" + e);
        }*/


/*        try {
            method02(2);
        } catch (IOException e) {
            System.out.println("捕获了IOException" + e);
        } catch (Exception e) {
            System.out.println("捕获了Exception" + e);
        }*/

/*        try {
            method02(2);
        } catch (Exception e) {
            System.out.println("捕获了Exception" + e);
        } catch (IOException e) {
            System.out.println("捕获了IOException" + e);
        }*/



    }

    public static void method01(int a) throws IOException, DataFormatException {
        if (a == 0) {
            throw new IOException();
        }
        if (a == 2) {
            throw new DataFormatException();
        }
    }

    public static void method02(int a) throws Exception {//IOException的声明可以省略,因为IOException extends Exption
        //此时可以只声明Exception
        if (a == 0) {//因为如果method02中 抛出IOException,  Exception temp = new IOException() //多态思想
            throw new IOException();
        }
        if (a == 2) {//如果method02中 抛出 Exception  ,   Exception temp = new Exception()
            throw new Exception();
        }
    }
}
